﻿/*
file js quản lý người dùng
*/
$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        VOFFICE = {};
    }

    VOFFICE.SystemFunction = (function () {
        var methods = {};
        methods.SystemFunctionGrid = null;
        methods.ParentId = 0;
        methods.Collection = null;
        var $table = $('#list-details');
        methods.CustomValidate = {
            errorLabelContainer: "#menu-form-error",
            rules: {
                Name: { required: true }
            },
            messages: {
                Name: { required: jsResources.lang.ManageUserUserNameRequired }
            }
        };
        methods.dialog = $('#dialog-box').dialog({
            autoOpen: false,
            show: "fade", //fix ie bug
            hide: "fade",
            modal: true,
            height: 'auto',
            width: 600,
            open: function (event, ui) {
                //$('.ui-dialog-titlebar', ui.dialog || ui).hide();
            },
            close: function (event, ui) {
            }
        });
        methods.buildJsTree = function () {
            $('#controllerTree').jstree({
                json_data: {
                    "ajax": {
                        "url": "/manageactionname/get_function_treeview/?nocache=" + (new Date()).toJSON(),
                        "type": "POST",
                        "dataType": "json",
                        "contentType": "application/json charset=utf-8"
                    }
                },
                plugins: ["themes", "json_data", "ui"]
            });
            $('#controllerTree').bind("loaded.jstree", function (event, data) {
                $('#controllerTree').jstree("open_all");
            });
            $("#controllerTree").bind("select_node.jstree", function (event, data) {
                var selectedObj = data.rslt.obj;
                methods.ParentId = selectedObj.attr('id');
                methods.buildGrid();
            });
        };
        /*
       Phan trang
       */
        methods.buildGrid = function () {
            //lấy dữ liệu
            SaveIndicator.indicate($.get('/manageactionname/gets', { 'id': methods.ParentId, nocache: (new Date()).toJSON() }, function (data) {
                if (!!data && data.Status == true) {
                    if (!!data.Result) {
                        $table.find('tbody').remove();
                        var list = new SystemFunctionCollection();
                        if (data.Result.length > 0) {
                            _.each(data.Result, function (item) {
                                var dept = new SystemFunction({
                                    'id': item.Id,
                                    'Name': item.Name,
                                    'ActionControllerName': item.ActionControllerName,
                                    'Description': item.Description,
                                    'ParentId': item.ParentId,
                                    'IsActive': item.IsActive,
                                    'IsRoot':item.IsRoot
                                });
                                list.push(dept);
                            });
                            $table.fadeIn();
                        }
                        methods.Collection = list;
                        methods.SystemFunctionGrid = new SystemFunctionGrid({ collection: list });
                        $table.append(methods.SystemFunctionGrid.render().el);
                    } else {
                        $table.empty();
                    }
                }
            }));
        };
        /*
        Hiển thị dialog để thêm sổ mới
        */
        var addNew = function () {
            var addView = new SystemFunctionForm({ model: new SystemFunction() });
            addView.render();
        };
        /*
        Hiển thị form để sửa một sổ đã tạo
        */
        methods.edit = function (model) {
            var editView = new SystemFunctionForm({ model: model });
            editView.render();
        };
        /*
        Hàm cập nhập dữ liệu trên trang sau khi save
        */
        methods.updateGrid = function (model, isNew) {
            $table.fadeIn("fast");
            if (isNew) {
                methods.Collection.add(model, { at: 0 });
            }
            methods.dialog.dialog('close');
        };
        // quy ước về hàm khởi tạo
        methods.init = function () {
            methods.buildJsTree();
            $("#controllerTree").bind("reselect.jstree", function () {
                $("#controllerTree").jstree('select_node', 'ul > li:first');
            });
            methods.buildGrid();
            $("#btnShowControllerPopup").bind("click", function () {
                VH.ShowControllerPopupTree();
            });
            $("#add-new").live("click", addNew);
        };
        return methods;
    })(VOFFICE.SystemFunction);

    VOFFICE.SystemFunction.init();
});
/*
View để thêm mới hay chỉnh sửa book (sổ công văn)
*/
window.SystemFunctionForm = Backbone.View.extend({
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    render: function () {
        var self = this;
        this.template = _.template($('#function-form-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));

        VOFFICE.SystemFunction.dialog.html($(this.el).html(this.template({ model: this.model.toJSON() })));
        var isNew = this.model.get('id') == 0;
        if (!isNew) {
            VOFFICE.SystemFunction.dialog.dialog('option', 'title', jsResources.lang.ManageDeptpartment_UpdateTitle);
        } else {
            VOFFICE.SystemFunction.dialog.dialog('option', 'title', jsResources.lang.ManageDeptpartment_AddTitle);
        }

        var dialogCloseButtons = jsResources.lang.ButtonClose;
        var dialogUpdateButtons = jsResources.lang.Update;
        var dialogButtons = {};
        dialogButtons[dialogUpdateButtons] = function () {
            //tao moi hay cap nhap du lieu
            SaveIndicator.indicate(self.model.save({
                'Name': $('#Name').val(),
                'ActionControllerName': $('#ActionControllerName').val(),
                'ParentId': VOFFICE.SystemFunction.ParentId,
                'Description': $('#Description').val(),
                'IsActive': $('#IsActive').is(':checked'),
                'modifiedscope': 'all'
            }, {
                success: function (data) {
                    VOFFICE.SystemFunction.updateGrid(self.model, isNew);
                },
                error: function (data) {
                    VOFFICE.SystemFunction.closeDialog();
                },
                complete: function () {
                    VOFFICE.SystemFunction.buildJsTree();
                    $("#departmentTree").bind("reselect.jstree", function () {
                        $("#departmentTree").jstree("select_node", "#" + VOFFICE.SystemFunction.ParentId);
                    });
                }
            }));
        };
        dialogButtons[dialogCloseButtons] = function () { $(this).dialog('close'); };
        VOFFICE.SystemFunction.dialog.dialog(
            {
                buttons: dialogButtons
            }
        );

        VOFFICE.SystemFunction.dialog.dialog('open');

        return this;
    },

    close: function () {
        this.remove();
        this.unbind();
        this.model.unbind("change", this.render, this);
    }
});
/*
Chứa một collection là list các book model
gọi đến BookGridItem để hiển thị dữ liệu
*/
window.SystemFunctionGrid = Backbone.View.extend({
    tagName: 'tbody',
    render: function () {
        $(this.el).html('');
        var i = 1;
        _.each(this.collection.models, function (sfunction) {
            sfunction.set({ 'Order': i });
            $(this.el).append((new SystemFunctionGridItem({ model: sfunction })).render().el);
            i++;
        }, this);
        return this;
    },

    /* 
    Khi grid có thêm bản ghi thì cập nhập
    */
    initialize: function () {
        var self = this;
        this.collection.bind("reset", this.render, this);
        this.collection.bind("add", function (sfunction) {
            $(self.el).prepend(new SystemFunctionGridItem({ model: sfunction }).render().el);
        });
    }
});
window.SystemFunctionGridItem = Backbone.View.extend({
    tagName: 'tr',

    //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    /*
    Các sự kiện trên một dòng trong grid 
    */
    events: {
        'click .grid-update-function': 'showUpdate',
        'click .grid-delete-function': 'deleteFn',
        'change .cbxIsActive': 'activeFn'
    },
    /*
    Active hay InActive sổ văn bản
    */
    activeFn: function (event) {
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsActive': $target.is(':checked'), 'modifiedscope': 'IsActive' }, function (data) {
            if (!data || data.Status == false) {
                alert("");
            }
        }));
    },
    /*
    Xóa sổ văn bản
    */
    deleteFn: function (event) {
        var self = this;
        VH.ConfirmBox(jsResources.ManageUserDeleteConfirm(self.model.get('Id')), jsResources.lang.Delete, jsResources.lang.Cancel,
            function () {
                //xoa du lieu
                SaveIndicator.indicate($.post('/manageactionname/delete', { 'curentid': self.model.get('id') }, function (data) {
                    if (!!data && data.Status == true) {
                        self.close();
                        VOFFICE.SystemFunction.buildJsTree();
                    } else {
                        VH.MessageBox(data.Result, function () { location.reload(); });
                    }
                }));
            },
            function () {
                return true;
            }, jsResources.lang.ManageUserDeleteTitle
        );
    },

    /*
    Hiển thị màn hình để cập nhập sổ văn bản
    */
    showUpdate: function (event) {
        VOFFICE.SystemFunction.edit(this.model);
    },

    /*
    Kết hợp template và model để hiển thị lên 1 dòng (tr)
    chứa thông tin của 1 sổ văn bản trong grid
    */
    render: function () {
        this.template = _.template($('#list-function-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },

    close: function () {
        $(this.el).remove();
    }
});